package com.hnchances.studentscoresystem.service;

import com.hnchances.studentscoresystem.dto.request.UserLoginDTO;
import com.hnchances.studentscoresystem.dto.request.UserRegisterDTO;
import com.hnchances.studentscoresystem.dto.request.UserUpdateDTO;
import com.hnchances.studentscoresystem.dto.response.UserInfoResponse;
import com.hnchances.studentscoresystem.entity.User;

/**
 * 用户管理 Service 接口（核心业务）
 * 对应数据库表：user
 * 核心需求：注册、登录、信息查询/修改/删除（权限控制）
 */
public interface UserService extends BaseService<User, Long> {

    /**
     * 用户注册（学生/老师，管理员免做）
     * @param registerDTO 注册请求参数
     * @return 注册结果（true-成功，false-失败）
     */
    boolean register(UserRegisterDTO registerDTO);

    /**
     * 用户登录（生成 JWT Token）
     * @param loginDTO 登录请求参数
     * @param loginIp 登录 IP（记录最后登录信息）
     * @return JWT Token
     */
    String login(UserLoginDTO loginDTO, String loginIp);

    /**
     * 根据 Token 获取用户信息（排除密码）
     * @param token JWT Token
     * @return 用户信息响应
     */
    UserInfoResponse getUserInfoByToken(String token);

    /**
     * 用户信息修改（鉴权：仅本人或管理员可修改）
     * @param updateDTO 修改请求参数
     * @param operatorId 操作人 ID（从 Token 解析）
     * @return 修改结果（true-成功，false-失败）
     */
    boolean updateUser(UserUpdateDTO updateDTO, Long operatorId);

    /**
     * 用户软删除（鉴权：仅老师可删除本班级用户，学生无权限）
     * @param deletedUserId 待删除用户 ID
     * @param operatorId 操作人 ID
     * @param operatorIdentity 操作人身份（0-学生，1-老师，2-管理员）
     * @param operatorClassId 操作人班级 ID（老师需匹配）
     * @return 删除结果（true-成功，false-失败）
     */
    boolean deleteUser(Long deletedUserId, Long operatorId, Integer operatorIdentity, Integer operatorClassId);

    /**
     * 根据用户名查询用户（登录校验）
     */
    User selectByUserName(String userName);
}